home *** CD-ROM | disk | FTP | other *** search
/ Aminet 25 / Aminet 25 (1998)(GTI - Schatztruhe)[!][Jun 1998].iso / Aminet / dev / misc / BoulderEngine.lha / source / geras / BOULDER3.C < prev    next >
Encoding:
Text File  |  1998-03-30  |  2.5 KB  |  110 lines

  1. /* ==================================================
  2.    =  Cia turi buti JOYSTICK'o proceduros  +        =
  3.    =  Advanced topics.                              =
  4.    =  FILE BOULDER3.C pradetas 1993.12.21           =
  5.    =  ©bySAVELSOFT                +1995             =
  6.    ================================================== */
  7. SHORT hx,hy;
  8. USHORT LIVES,ITEMS,BONUS,ALIVE,FINISH;
  9. ULONG SCORE;
  10. SHORT pekb(),pekc(),fire();
  11. short man2()
  12. {
  13. SHORT a,b;
  14. a=pekc();
  15. b=0; hx=0; hy=0;
  16. if(a==3) {b=1; hx=1; }
  17. if(a==12) {b=1; hx=-1; return(b);}
  18. if(a==4) {b=1; hy=-1; }
  19. if(a==1) {b=1; hy=1; }
  20. return(b);
  21. }
  22. man(mx,my)
  23. SHORT mx,my;
  24. {
  25. SHORT i,q,x,y;
  26. i=man2(); if(!i){ return(); }
  27. x=mx+hx; y=my+hy;
  28. q=e(x,y); if(q==12){FINISH=1; q=1;}
  29. if(!fire()) {
  30.  if(q==20) { LIVES++; q=1; }
  31.  if(q<2 && !hy) {walk(mx,my,hx); return(); }
  32.  if(q==3 && !hy) {walk(mx,my,hx); SCORE+=BONUS; Adzin=1;
  33.     if(ITEMS){ITEMS--; }
  34.     return(); }
  35.  if(q<2) {set(mx,my,0); set(x,y,10); if(hy==-1){k(x,y)=9; ALIVE=16;} return(); }
  36.  if(q==3) {set(mx,my,0); set(x,y,10); if(hy==-1){k(x,y)=9; ALIVE=16;}
  37.   SCORE+=BONUS; Adzin=1;
  38.   if(ITEMS){ITEMS--;} return(); }
  39.  if((q==2 || q==14) && !e(mx+2*hx,my)) {set(mx,my,0); set(x,y,10);set(mx+2*hx,my,q);
  40.    k(x,y)=9; ALIVE=19;
  41.    return(); }
  42. }
  43. if(fire())
  44. {
  45. if(q==3) {set(x,y,0); SCORE+=BONUS; Adzin=1; if(ITEMS) {ITEMS--;} return(); }
  46. if(q==1) {set(x,y,0); return(); }
  47. if(q==20) {set(x,y,0); LIVES++; Adzin=1; return(); }
  48. if((q==2 || q==14) && !e(mx+2*hx,my)) {set(x,y,0); set(mx+2*hx,my,q);
  49.    if(hx==1){k(mx+2,my)=9;} return();
  50.  }
  51. }
  52.  
  53.  
  54. }
  55. walk(x,y,dx)
  56. SHORT x,y,dx;
  57. {
  58. set(x,y,0);
  59. set(x+dx,y,10); if(dx==1) { k(x+dx,y)=9; }
  60. }
  61.  
  62. SHORT fire()
  63. { short a;
  64. a=pekb(0xBFE000);
  65. if(a>127) {return(0);}
  66. return(1);
  67. }
  68. mgo(k,x,y,c1,c2,c3,c4)        /* Tai perkeltos Magmos proc. */
  69. SHORT k,x,y,c1,c2,c3,c4;
  70. {
  71.  if(k==1) {set(c1,y,6); k(c1,y)=9; }
  72.  if(k==2) {set(x,c3,6); k(x,c3)=9; }
  73.  if(k==3) {set(c2,y,6); }
  74.  if(k==4) {set(x,c4,6); }
  75. }
  76. go(c1,c2,c3,c4,kq,q,x,y)
  77. SHORT c1,c2,c3,c4,kq,q,x,y;
  78. {
  79. set(x,y,0);
  80. if(kq==1) {set(c1,y,q); k(c1,y)=20; return(); }
  81. if(kq==2) {set(x,c3,q); k(x,c3)=30; }
  82. if(kq==3) {set(c2,y,q); k(c2,y)=4; }
  83. if(kq==4) {set(x,c4,q); k(x,c4)=5; }
  84. }
  85.   /* Dievuleliau, Levas moka M68000 asembleri! */
  86. #asm
  87.    section code
  88.    xdef _pekb
  89. _pekb
  90.    move.l 4(sp),d0
  91.    movem.l a0,-(sp)
  92.    move.l d0,a0
  93.    move.l (a0),d0
  94.    andi.l #$ff,d0
  95.    movem.l (sp)+,a0
  96.    rts
  97.    xdef _pekc
  98. _pekc
  99.    movem.l d1,-(sp)
  100.    move.w ($DFF00C),d0
  101.    andi.l #$300,d0
  102.    divu.w #64,d0
  103.    move.w ($DFF00C),d1
  104.    andi.l #$003,d1
  105.    or.l d1,d0
  106.    movem.l (sp)+,d1
  107.    rts
  108. #endasm
  109.  
  110.